Golang调用系统命令时如何指定执行路径(切换目录)? 您所在的位置:网站首页 go mod命令 Golang调用系统命令时如何指定执行路径(切换目录)?

Golang调用系统命令时如何指定执行路径(切换目录)?

#Golang调用系统命令时如何指定执行路径(切换目录)?| 来源: 网络整理| 查看: 265

场景带入

先看一个场景,假如从代码托管平台(github、gitlab、gitee等)克隆一个Golang项目,使用git clone完成以后,需要切换(cd)到这个项目里面去做一些操作,例如使用go mod download安装依赖包。

这一系列操作如果使用程序来实现的话还是有一点不同的,特别是切换到项目目录的动作。人工操作的话直接执行 cd dst-path 命令即可,使用程序调用 cd 系统命令这么做却是无效的。

Golang中的实现方法

Golang中调用系统命令的方法是这样的,以上面的git clone为例:

package main

import "os/exec"

func main() { err := exec.Command("git", "clone", "https://github.com/xxx/test").Run() if err != nil { panic(err) }}

接下来就需要切换到这里的 test 目录去执行 go mod tidy 命令了,你可能会想到这么实现:

package main

import "os/exec"

func main() { err := exec.Command("git", "clone", "https://github.com/xxx/test").Run() if err != nil { panic(err) }

err = exec.Command("cd", "./test").Run() if err != nil { panic(err) }

err = exec.Command("go", "mod", "download").Run() if err != nil { panic(err) }}

到这里你就错了,在程序里这么写是不会生效的,可以执行代码看看效果。正确的方式应该这么写:

package main

import "os/exec"

func main() { err := exec.Command("git", "clone", "https://github.com/xxx/test").Run() if err != nil { panic(err) }

cmd := exec.Command("go", "mod", "download") cmd.Dir = "./test" err = cmd.Run() if err != nil { panic(err) }}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有